package com.example.stockservice.service;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;

@Service
@RefreshScope
public class StockService {

    // 模拟数据库存储库存（商品ID -> 库存数量）
    private static final Map<String, Integer> stockMap = new HashMap<>();
    // 从Nacos配置中获取初始库存（默认100）
    @Value("${stock.init.count:100}")
    private int initStock;

    // 初始化库存数据
    static {
        // 这里会使用Nacos配置的initStock
        // 注意：静态代码块在@Value注入前执行，实际使用需在@PostConstruct中初始化
       // stockMap.put("P001", 100);  // 商品P001初始库存100
        //stockMap.put("P002", 200);  // 商品P002初始库存200
    }
    // 初始化库存（使用@PostConstruct确保在@Value注入后执行）
    @PostConstruct
    public void init() {
        stockMap.put("P001", initStock);
        stockMap.put("P002", initStock * 2);  // P002初始库存为2倍
    }
    /**
     * 扣减库存
     * @param productId 商品ID
     * @param quantity 扣减数量
     * @return 扣减是否成功
     */
    public synchronized boolean deduct(String productId, int quantity) {
        Integer stock = stockMap.get(productId);
        if (stock == null || stock < quantity) {
            return false; // 库存不足
        }
        stockMap.put(productId, stock - quantity);
        return true;
    }

    /**
     * 查询库存
     * @param productId 商品ID
     * @return 库存数量
     */
    public int getStock(String productId) {
        return stockMap.getOrDefault(productId, 0);
    }
}
